#!/usr/bin/bash
#!/usr/bin/bash

# 此脚本为一些常用通用的内容，方便其它脚本使用

# 1、主从复制状态
# 2、mysql增删改查次数
# 3、mysql启动时间
# 4、mysql的qps 每秒查询速率、tps 每秒事务速率
# show global status like 'Com_commit';
# show global status like 'Com_rollback';
# show global status like 'uptime';
# show global status like 'select';
# 5、主从同步延迟
# 6、磁盘剩余空间 /分区 /data分区
# 7、内存使用百分比
# 8、swap使用百分比
# 9、网卡输入输出流量
# 10、mysql的当前连接数
# 需求，输出结果即可



# 1、查看MySQL的主从复制状态
check_mslave_stauts(){
    # 目前只针对单主单从的场景,且从库只关联一个主库
    # $1 主库用户 $2 主库密码 $3 从库用户 $4 从库密码  $5 从库ip

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi

    # 查看主库Executed_Gtid_Set状态信息
    master_executed_gtid=$(echo `mysql -u$1 -p"$2" -e "show master status" 2>/dev/null | awk  'END {print $NF}'`)
    # echo $master_executed_gtid
    

    # 查看从库状态信息
    slave_io_status=$(echo `mysql -u$3 -p"$4" -h "$5" -e "show slave status\G" 2>/dev/null | grep Slave_IO_Running: | awk '{print $NF}'`)

    slave_sql_status=$(echo `mysql -u$3 -p"$4" -h "$5" -e "show slave status\G" 2>/dev/null | grep Slave_SQL_Running: | awk '{print $NF}'`)

    slave_executed_gtid=$(echo `mysql -u$3 -p"$4" -h "$5" -e "show slave status\G" 2>/dev/null | grep Executed_Gtid_Set: | awk '{print $NF}'`)
    
    if [ "$slave_executed_gtid" = "$master_executed_gtid" ];then
        if [ "$slave_io_status" = "Yes" ] && [ "$slave_sql_status" = "Yes" ];then
            echo "主从库复制状态连接正常，可以进行主从复制"
        else
            echo "主从库复制状态连接异常,IO/SQL线程没有连接成功,请检查配置重新关联主库"
        fi
    else
        echo "主从库信息executed_gtid没有关联上,请检查从库配置(提示 show slave status\G)"
    fi
}

# check_mslave_stauts $1 $2 $3 $4 $5

# mysql增删改查次数
find_idus_num(){
    # $1 用户 $2 密码

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi

    export select_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_select'" 2> /dev/null | awk 'END{print $NF}'`)

    export insert_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_update'" 2> /dev/null | awk 'END{print $NF}'`)

    export delete_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_delete'" 2> /dev/null | awk 'END{print $NF}'`)

    export update_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_insert'" 2> /dev/null | awk 'END{print $NF}'`)

    echo "
    数据库查找语句有${select_num}条
    增加语句有${insert_num}条
    删除语句有多少${delete_num}条
    修改语句有${update_num}条
    "

}
# find_idus_num $1 $2 


# 查看mysql启动时间
find_mysql_starttime(){
    # $1 用户 $2 密码

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi

    export mysql_starttime_s=$(echo `mysql -u$1 -p"$2" -e "show global status like 'uptime'" 2> /dev/null | awk 'END{print $NF}'`)
    
    mysql_starttime=`echo "scale=2;$mysql_starttime_s / 3600" | bc -l`
    if [ "${mysql_starttime:0:1}" = "." ];then
        mysql_starttime="0$mysql_starttime"
    fi
    echo "MySQL启动时间为${mysql_starttime}小时前"
}

# find_mysql_starttime $1 $2


# mysql事务提交回滚次数
mysql_com_num(){
    # $1 用户 $2 密码

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi

    # 计算TPS
    export commit_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_commit'" 2> /dev/null | awk 'END{print $NF}'`)

    export rollback_num=$(echo `mysql -u$1 -p"$2" -e "show global status like 'Com_rollback'" 2> /dev/null | awk 'END{print $NF}'`)

}
# mysql_com_num $1 $2 


# 4、mysql的qps 每秒查询速率、tps 每秒事务速率
mysql_qps_tps(){
    # $1 用户 $2 密码

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi


    find_idus_num $1 $2 $>/dev/null
    find_mysql_starttime $1 $2 $>/dev/null

    # 计算QPS
    times=$[$select_num+$insert_num+$delete_num+$update_num]
    QPS=`echo "scale=4;$times / $mysql_starttime_s" | bc -l`
    echo "mysql的每秒查询速率qps为$QPS"

    # 计算TPS
    mysql_com_num  $1 $2 $>/dev/null

    com_nums=$[$commit_num+$rollback_num]
    TPS=`echo "scale=4;$com_nums / $mysql_starttime_s" | bc -l`
    echo "mysql的每秒查询速率tps为$TPS"
    
}


# mysql_qps_tps $1 $2



# 5、主从同步延迟
check_mslave_delay(){
    # 目前只针对单主单从的场景,且从库只关联一个主库
    # $1 从库用户 $2 从库密码  $3 从库ip

    # 判断mysql是否启动
    # mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    # if [ "$mysql_status" != "running" ];then
    #     echo "查找失败：请先检查当前MySQL数据库是否启动"
    #     exit 1
    # fi

    # 查看从库状态信息
    Seconds_Behind_Master=$(echo `mysql -u$1 -p"$2" -h "$3" -e "show slave status\G" 2>/dev/null | grep Seconds_Behind_Master: | awk '{print $NF}'`)
    if [ "$Seconds_Behind_Master"  = "NULL" ];then
        echo "主从库同步延时为 "$Seconds_Behind_Master "请检查主从库连接状态" 
    else
        echo "主从库同步延时为 "$Seconds_Behind_Master
    fi
 
}

check_mslave_delay $1 $2 $3


# 6、磁盘剩余空间 /分区 /data分区
free_message(){
    # /data分区暂未实现查询功能

    # /分区
    unuse_frees=`df -h / | awk 'END{print $(NF-2)}'`
    used_frees=`df -h / | awk 'END{print $(NF-3)}'`
    all_frees=`df -h / | awk 'END{print $2}'`
    echo "/分区磁盘使用情况为 总大小：${all_frees}已使用：${used_frees}未使用：${unuse_frees}"

}

# free_message


# 7、内存使用百分比
mem_message(){
    # /data分区暂未实现查询功能

    # /分区
    all_mem=`free -m | grep Mem | awk '{print $2}'`
    used_mem=`free -m | grep Mem | awk '{print $3}'`
    mem=`echo "scale=2;$used_mem / $all_mem" | bc -l | awk -F "." '{print $NF}'`
    echo "内存已使用百分比为：${mem}%"

}

# mem_message


# 8、swap使用百分比
swap_message(){
    # /data分区暂未实现查询功能

    # /分区
    all_swap=`free -m | grep Swap | awk '{print $2}'`
    used_swap=`free -m | grep Swap | awk '{print $3}'`
    swap=`echo "scale=2;$used_swap / $all_swap" | bc -l | awk -F "." '{print $NF}'`
    echo "swap使用百分比为：${swap}%"

}

# swap_message


# 9、网卡输入输出流量

# 安装使用
# wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
# tar xzvf ifstat-1.1.tar.gz
# cd ifstat-1.1
# ./configure
# make
# make install

network_flow_rate(){
    :

}


# network_flow_rate

# 10、mysql的当前连接数
# SHOW STATUS LIKE 'Threads_connected';
# mysqladmin -u 用户名 -p 密码 -h 主机 status
check_mysql_links(){
    # $1 用户 $2 密码

    # 判断mysql是否启动
    mysql_status=$(systemctl status mysqld |grep active | awk '{print $3}'|tr -d '()')
    if [ "$mysql_status" != "running" ];then
        echo "查找失败：请先检查当前MySQL数据库是否启动"
        exit 1
    fi

    # 查看从库状态信息
    mysql_links=$(echo `mysql -u$1 -p"$2" -e "SHOW STATUS LIKE 'Threads_connected'" 2>/dev/null | awk 'END{print $NF}'`)
    echo "mysql的当前连接数为： "$mysql_links
 
}

# check_mysql_links $1 $2
